#ifndef GAMEMODEL_H
#define GAMEMODEL_H

#include <vector>

// 游戏模式
enum GomokuGameMode
{
    HUMAN_VS_HUMAN,
    HUMAN_VS_AI
};

// 游戏状态
enum GomokuGameState
{
    GAME_ACTIVE,
    GAME_WIN,
    GAME_DRAW
};

// 棋盘尺寸
const int BOARD_DIMENSION = 15;

class GomokuGameEngine
{
public:
    GomokuGameEngine();

public:
    std::vector<std::vector<int>> boardState; // 存储当前游戏棋盘和棋子的情况,空白为0，白子1，黑子-1
    std::vector<std::vector<int>> positionScores; // 存储各个点位的评分情况，作为AI下棋依据
    bool isPlayerTurn; // 标示下棋方
    GomokuGameMode currentMode; // 游戏模式
    GomokuGameState currentState; // 游戏状态

    void initializeGame(GomokuGameMode mode); // 开始游戏
    void evaluatePositions(); // 计算评分
    void humanMove(int row, int col); // 人执行下棋
    void aiMove(int &selectedRow, int &selectedCol); // 机器执行下棋
    void updateBoard(int row, int col); // 每次落子后更新游戏棋盘
    bool checkVictory(int row, int col); // 判断游戏是否胜利
    bool checkDraw(); // 判断是否和棋
};

#endif // GAMEMODEL_H
